//实现思路，一个锚点对应一个content，每一个content初始化为qrcode，每一个qrcode对象可以通过makeCode重新生成二维码
//如果每个锚点的提示内容不变，则只需要在传入的config.text的内容同时不添加data-qrcode-content和调用config.getNewContent()
//如果锚点内容通过ko等库渲染到dom锚点的属性data-qrcode-content中，则会从中读取值，并更新二维码
//如果存在config.getNewContent()，则会覆盖上面的内容，根据这个方法的返回值更新二维码
define(['qrcode', 'jquery'], function(QRCode, $) {
	function makeHoverQrcode(config) {
		if(!config) throw Error("请传入config对象");
		var selector = null;
		//config配置项
		if(!config.selector) {
			throw Error('请传入jquery支持的选择器,如：.box')
		} else {
			selector = config.selector;
		}
		var text = config.text ? config.text : "hello world";
		var position = config.position ? config.position : 'right';
		var hideDelay = config.hideDelay ? config.hideDelay : 200;
		var width = config.width ? config.width : 120;
		var height = config.height ? config.height : 120;
		var bgColor = config.bgColor ? config.bgColor : "#ffffff";
		var color = config.color ? config.color : "#000000";
		var deltaX = config.deltaX ? config.deltaX :0;
        var deltaY = config.deltaY ? config.deltaY :0;
        
		var qrcodeConfig = {
			width: width,
			height: height,
			colorDark: color,
			colorLight: bgColor,
			correctLevel: QRCode.CorrectLevel.H
		};
		var eleStr = '<div style="width:' + width + 'px;height:' + height + 'px;"></div>';
		$(selector).tooltip({
			'position': position,
			content: eleStr,
			hideDelay: hideDelay,
			deltaX:deltaX,
			deltaY:deltaY,
			onShow: function(e) {
				var $this = $(this);
				if(!$this.data('make-code')) { //如果值为undefined和false的时候，生成qrcode
					$this.data('make-code', true);
					var anchor = $(eleStr).get(0);
					var qrcode = new QRCode(anchor, qrcodeConfig);
					$this.data("anchor", anchor);
					$this.data("qrcode", qrcode);
				}
				if($this.data('qrcode-content')) {
					text = $this.data('qrcode-content');
				} else if(config.getNewContent) {
					text = config.getNewContent();
				}
				$this.data("qrcode").makeCode(text);
				$this.tooltip('update', $this.data("anchor"));
				$this.tooltip('tip').css({
					'padding': '10px',
					'border-radius': '5px'
				});
				if(config.onShow){
                    config.onShow.apply(this,arguments);
                }
			}
		});
	}
	return {
		makeHoverQrcode:makeHoverQrcode
	}
})